// src/plugins/axios.ts
import axios from 'axios';

import {Authorization, BEARER} from '@/constant/index.ts'

// 创建 Axios 实例
const http = axios.create({
  baseURL: import.meta.env.VITE_BASE_URL, // 设置 baseURL
  timeout: Number(import.meta.env.VITE_REQUEST_TIME), // 设置请求超时（可选）
});

// 请求拦截器
http.interceptors.request.use(
  (config) => {
    const token = localStorage.getItem(Authorization);
    if (token) {
      config.headers[Authorization] = BEARER + `${token}`;
    }
    return config;
  },
  (error) => {
    // 请求错误处理
    return Promise.reject(error);
  }
);

// 响应拦截器
http.interceptors.response.use(
  (response) => {
    if (response.status != 200) {
      window.$message?.error("网络异常")
      return Promise.reject("网络异常");
    }
    if (response.data.code != 200) {
      window.$message?.error(response.data.msg || "系统错误")
      // message.error('Once upon a time you dressed so fine')
      return Promise.reject(new Error(response.data.msg || "系统错误"));
    }
    return response.data;
  },
  (error) => {
    // 响应错误处理
    if (error.response) {
      // 服务器响应了，但状态码超出 2xx 范围
      if (error.response.status == 503) {
        console.log('Response Error:', error.message)
        return Promise.reject('网关错误');
      }
      if (error.response.status == 500) {
        console.log('Response Error:', error.message)
        return Promise.reject('服务器开小差');
      }
      if (error.response.status == 403) {
        console.log('Response Error:', error.message)
        return Promise.reject('没有权限');
      }
    } else if (error.request) {
      // 请求已发出但没有响应
      console.error('Request error:', error.request);
    } else {
      // 其他错误
      console.error('Error:', error.message);
    }

    // 可以根据错误类型进行不同的操作，比如重定向到登录页面等
    return Promise.reject(error);
  }
);

export default http;
